home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
HyperPC 2
/
HyperPC 2 - Disc 1.iso
/
18_厳選!オンラインソフト130
/
アプリケーション
/
textcp75.lzh
/
cbsrc.lzh
/
user.c
< prev
Wrap
C/C++ Source or Header
|
1998-02-26
|
8KB
|
359 lines
#include <stdlib.h>
#include <mbctype.h>
#include <time.h>
#include <windows.h>
typedef struct{
char *Caption;
int PasteFlag;
void (*Func)(char *to , const char *from);
}TagData;
char RetCode[]="\r\n";
int GetLine(char *to , const char *from)
{
static const char *fr;
char *p;
int ret;
if(from) fr=from;
p=to;
ret=1;
while(1){
if(*fr==0){
*p=0;
break;
}
ret=0;
if(*fr==0xd){
fr++;
fr++;
*p=0;
break;
}
else{
*p=*fr;
p++;
fr++;
}
}
return ret;
}
void StrInsert(char *t,const char *f)
{
int k,i,l;
register char *p,*q;
l=strlen(t);
k=strlen(f);
p=t+l;
q=t+l+k;
for(i=0;i<=l;i++){
*(q--)=*(p--);
}
memcpy(t,f,k);
}
/*-------これ以降に処理関数を書いて下さい------------------------------
ToStrにクリップボードに入れる文字列を作るだけです。
ToStrの容量は300kbですので、越えないようにして下さい。
FromStrには現在のクリップボードの内容が入っていますので必要に応じて利用して下さい。
例のTimeStampでは、現在のクリップボードは無視しています。
関数を作ったら下のテーブルに登録して下さい。
フォーマットは
メニューのキャプション , 動作フラグ , 処理関数 ,
です。
動作フラグは処理の前後の動作をしていします。下の定義から選んで下さい。
PASTEにすると処理関数で作ったクリップボードのデータはすぐにペーストされます。
CUT_PASTEを指定すると、反転部分をカットしてからそれを本に処理を行い、その後ペーストされます。
COPYにすると反転部分をクリップボードにコピーしてからそれをもとに処理を始めます。
よって反転部分を置換するような処理ができます。
テーブルの終わりにはストッパーをおいておいてください。削除しないように・・・。
*/
static unsigned char *oomoji=(unsigned char*)"ABCDEFGHIJKLMNOPQRSTUVWXYZ";
static unsigned char *komoji=(unsigned char*)"abcdefghijklmnopqrstuvwxyz";
void ToOomoji(char *ToStr , const char *FromStr)
{
const unsigned char *p=(const unsigned char *)FromStr;
unsigned char *q=(unsigned char *)ToStr;
while(*p){
if(_ismbblead(*p)){
unsigned char *to=oomoji , *fr=komoji;
while(*fr){
if(memcmp(fr , p , 2)==0) break;
fr+=2;
to+=2;
}
if(*fr){
memcpy(q , to , 2);
}
else{
memcpy(q , p , 2);
}
q+=2;
p+=2;
}
else{
*q=(unsigned char)toupper((char)*p);
p++;
q++;
}
}
*q=0;
}
void ToKomoji(char *ToStr , const char *FromStr)
{
const unsigned char *p=(const unsigned char *)FromStr;
unsigned char *q=(unsigned char *)ToStr;
while(*p){
if(_ismbblead(*p)){
unsigned char *to=komoji , *fr=oomoji;
while(*fr){
if(memcmp(fr , p , 2)==0) break;
fr+=2;
to+=2;
}
if(*fr){
memcpy(q , to , 2);
}
else{
memcpy(q , p , 2);
}
q+=2;
p+=2;
}
else{
*q=(unsigned char)tolower((char)*p);
p++;
q++;
}
}
*q=0;
}
void Kakko(char *ToStr , const char *FromStr)
{
wsprintf(ToStr , "(%s)" , FromStr);
}
void TimeStamp(char *ToStr , const char *FromStr)
{
long tim;
struct tm *t;
tim=time(NULL);
t = localtime(&tim);
wsprintf(ToStr , "%02d/%02d/%02d %2d:%02d",t->tm_year , t->tm_mon+1 , t->tm_mday , t->tm_hour , t->tm_min);
}
void Swaping(char *ToStr , const char *FromStr)
{
int end;
char buf[400];
ToStr[0]=0;
end=GetLine(buf , FromStr);
while(end==0){
char top[40] , eq[10], atai1[40] , atai2[40] , tail[40];
char *p , *q;
top[0]=0;
eq[0]=0;
atai1[0]=0;
atai2[0]=0;
tail[0]=0;
p=top;
q=buf;
while(1){
if(*q!=' ' && *q!='\t'){
*p=0;
if(*q==0) goto MakeLine;
break;
}
*p=*q;
p++;
q++;
}
p=atai1;
while(1){
if(*q==0){
goto MakeLine;
}
if(*q=='='){
*p=0;
if(*(q-1)==':'){
*(p-1)=0;
strcpy(eq , ":=");
}
else{
strcpy(eq , "=");
}
q++;
break;
}
*p=*q;
p++;
q++;
}
while(1){
if(*q!=' ' && *q!='\t'){
if(*q==0) goto MakeLine;
break;
}
q++;
}
p=atai2;
while(1){
if(*q==0){
*p=0;
goto MakeLine;
}
if(*q=='{' || *q==';' || *q=='/' || *q=='\''){
*p=0;
break;
}
*p=*q;
p++;
q++;
}
strcpy(tail , q);
MakeLine:
strcat(ToStr , top);
strcat(ToStr , atai2);
strcat(ToStr , eq);
strcat(ToStr , atai1);
strcat(ToStr , tail);
strcat(ToStr , RetCode);
end=GetLine(buf , NULL);
}
}
void Left(char *ToStr , const char *FromStr)
{
int end;
char buf[400];
ToStr[0]=0;
end=GetLine(buf , FromStr);
while(end==0){
int k,i,j;
char *p;
i=0;
j=0;
p=buf;
while(1){
if(*p!=' ' && *p!='\t'){
break;
}
if(*p==' '){
j++;
if(j==8){
i=i+8;
j=0;
}
}
if(*p=='\t'){
i=i+8;
j=0;
}
p++;
}
i=i+j;
for(k=0;k<i-4;k++){
strcat(ToStr , " ");
}
strcat(ToStr , p);
strcat(ToStr , RetCode);
end=GetLine(buf , NULL);
}
}
void Right(char *ToStr , const char *FromStr)
{
int end;
char buf[400];
ToStr[0]=0;
end=GetLine(buf , FromStr);
while(end==0){
char *p;
p=buf;
while(1){
if(*p!=' ' && *p!='\t'){
break;
}
p++;
}
StrInsert(p , " ");
strcat(ToStr , buf);
strcat(ToStr , RetCode);
end=GetLine(buf , NULL);
}
}
void Innyou(char *ToStr , const char *FromStr)
{
int end;
char buf[400];
ToStr[0]=0;
end=GetLine(buf , FromStr);
while(end==0){
//ここに1行ごとの処理を書くといい bufに1行が入ってくる
strcat(ToStr , ">");
strcat(ToStr , buf);
strcat(ToStr , RetCode);
end=GetLine(buf , NULL);
}
}
/* 複数行処理のスケルトン
void foo(char *ToStr , const char *FromStr)
{
int end;
char buf[400];
ToStr[0]=0;
end=GetLine(buf , FromStr);
while(end==0){
//ここに1行ごとの処理を書くといい bufに1行が入ってくる
strcat(ToStr , buf);
strcat(ToStr , RetCode);
end=GetLine(buf , NULL);
}
}
*/
#define NOTHING 0
#define COPY 1
#define PASTE 2
#define CUT_PASTE 3
TagData Data[]={
{"引用マーク(&I)" , COPY , Innyou},
{"大文字に変換(&B)" , CUT_PASTE , ToOomoji},
{"小文字に変換(&S)" , CUT_PASTE , ToKomoji},
{"インデント4つ右へ(&R)" , CUT_PASTE , Right},
{"インデント4つ左へ(&L)" , CUT_PASTE , Left},
{"()で囲む(&K)" , CUT_PASTE , Kakko},
{"代入逆転(&X)" , NOTHING , Swaping},
{"タイムスタンプ(&T)" , PASTE , TimeStamp },
{NULL , 0 , NULL } /*Stopper*/
};
/*-------ここまでを変更-----------------------------------------*/
BOOL WINAPI DllMain(HINSTANCE hDLL , DWORD deReason , LPVOID lpRe)
{
return TRUE;
}
int GetMenuData(int num , char *Caption , int *p)
{
int end=0;
if(Data[num].Caption==NULL){
end=1;
}
else{
strcpy(Caption , Data[num].Caption);
*p=Data[num].PasteFlag;
}
return end;
}
void GetClipData(int n ,char *to , const char *from)
{
Data[n].Func(to , from);
}